QT += core network
QT -= gui

# 命令行模式
#CONFIG += c++11 console
#CONFIG -= app_bundle

QT       += core gui printsupport network concurrent

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat

# 指定项目类型
TEMPLATE = app
# 项目名称
TARGET = qt5_tcp_server

# 支持更大的资源文件
CONFIG += resources_big
# 同时构建 Debug 和 Release 版本
CONFIG += debug_and_release

# 界面模式
CONFIG += c++11
CONFIG -= app_bundle

TARGET = qt5_tcp_server
TEMPLATE = app

SOURCES += \
    main.cpp \
    tcpdialog.cpp \
    tcpserver.cpp \
    clientmanager.cpp \
    clientconnection.cpp \
    threadpool.cpp

HEADERS += \
    tcpdialog.h \
    tcpserver.h \
    clientmanager.h \
    clientconnection.h \
    threadpool.h

# Enable thread support
QMAKE_CXXFLAGS += -pthread
LIBS += -pthread

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target



# 添加 QML 调试支持
CONFIG(qml_debug) {
    message("QML debugging enabled")
}

win32 {
    # 生成崩溃转储文件（dump file）
    LIBS += -lDbghelp

    contains(DEFINES, WIN64) {
        LIBS += -L"D:/Windows Kits/10/Lib/10.0.17763.0/ucrt/x64"
    } else {
        LIBS += -L"D:/Windows Kits/10/Lib/10.0.17763.0/ucrt/x86"
    }

    CONFIG(release, debug|release) {
        # exe以管理员权限运行
        QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator' uiAccess='false'"
        # release下生成pdb
        QMAKE_CXXFLAGS_RELEASE = $${QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO}
        QMAKE_LFLAGS_RELEASE = $${QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO}
    }


    # 未使用的变量警告⚠️
    #QMAKE_CXXFLAGS += /wd4101

    # 区分编译器
    msvc {
        # MSVC编译器配置
        message("Using MSVC compiler")

        # 解决中文乱码
        QMAKE_CXXFLAGS +=  /source-charset:utf-8 /execution-charset:utf-8
        QMAKE_CFLAGS   +=  /source-charset:utf-8 /execution-charset:utf-8
        # 忽略代码页警告
        QMAKE_CXXFLAGS += /wd4819 /wd4828

        CONFIG(debug, debug|release) {
            QMAKE_LFLAGS_DEBUG += /DEBUG /MAP      # 添加链接选项：生成调试信息（Debug模式）
            QMAKE_CXXFLAGS_DEBUG += /Zi            # 添加编译选项：生成调试信息（Debug模式）
        }
        CONFIG(release, debug|release)  {
            QMAKE_CFLAGS_RELEASE   += -Zi                            # 生成C调试信息放到pdb文件中
            QMAKE_CXXFLAGS_RELEASE += -Zi                            # 生成C++调试信息放到pdb文件中
            QMAKE_LFLAGS_RELEASE   += /DEBUG /OPT:REF /OPT:ICF /MAP  # 生成调试信息放到pdb文件中
            QMAKE_CFLAGS_RELEASE   += -O0                            # 取消C优化
            QMAKE_CXXFLAGS_RELEASE += -O0                            # 取消C++优化
        }
    }

    mingw {
        # MinGW编译器配置
        message("Using MinGW compiler")

        # 启用 OpenMP 多线程
        win32-g++: QMAKE_CXXFLAGS += -fopenmp
        win32-g++: QMAKE_LFLAGS   += -fopenmp

        CONFIG(debug, debug|release) {
               QMAKE_CFLAGS_DEBUG   += -g               # 生成C调试信息
               QMAKE_CXXFLAGS_DEBUG += -g               # 生成C++调试信息
        }
        CONFIG(release, debug|release)  {
            QMAKE_CFLAGS_RELEASE   += -O0              # 显示指定禁止C优化
            QMAKE_CFLAGS_RELEASE   += -g               # 生成C调试信息
            QMAKE_CXXFLAGS_RELEASE -= -O2              # 取消C++优化
            QMAKE_CXXFLAGS_RELEASE += -O0              # 显示指定禁止C++优化
            QMAKE_CXXFLAGS_RELEASE += -g               # 生成C++调试信息
            QMAKE_LFLAGS_RELEASE   -= -Wl -s           # 取消release模式删除所有符号表和重新定位信息的设置
            QMAKE_LFLAGS_RELEASE   += -g               # 链接器生成调试信息
        }
    }
}

FORMS += \
    tcpdialog.ui
